Systems and methods for networking coding using Reed-Solomon codes

ABSTRACT

A method for network coding includes encoding a plurality of message packets to produce a plurality of encoded packets. Each message packet and each encoded packet includes a plurality of symbols having an index and each symbol of the encoded packets is generated by applying a Reed-Solomon code to the symbols of the message packets having the same index as the symbol of the encoded packets. A length of the encoded packets is the same as a length of the message packets.

CROSS-REFERENCE TO RELATED APPLICATION

The present application claims priority to U.S. Provisional PatentApplication No. 61/527,188 filed on Aug. 26, 2011; Ser. Nos. 13/595,862,13/595,894, 13/596,000, and 13/596,005, now U.S. Pat. No. 8,839,085. Allrelated applications were filed on Aug. 27, 2012.

BACKGROUND

In wireless networks, the ability to correctly receive data packets withincreased reliability is important. Typically, if a packet is lost intransmission, the intended recipient requests that the sender retransmitthe packet. However, certain systems that utilize a wireless network mayrequire a very low packet loss and retransmission rate, for examplewhere the data being transmitted via the wireless network is critical tothe safety or performance of the system. In these systems, packet lossleading to requests for retransmission is unacceptable.

Network coding is a technique that can be used to improve the capacityand efficiency of network transmissions. Network coding functions bytransmitting an encoded function of the data bits rather than theoriginal data bits; subsequently, the function of the data bits isdecoded to obtain the original data bits. Transmitting functions of thedata bits in this manner can reduce the average number of transmissionsneeded for a given amount of information, which reduces the number ofretransmissions needed if there are bit errors or erasures.

Applying a network code to the bits of a packet results in a greaternumber of bits than originally contained in the packet. Although theextra bits that result from the application of the network code enablethe recipient to successfully decode and recover the original bits ifthe packet is received, if a packet is lost during transmission, thepacket must be retransmitted.

SUMMARY

The problems noted above are solved in large part by embodimentsdirected to a method for network coding that includes encoding aplurality message packets to produce a plurality of encoded packets, forexample that include the message packets and one or more parity packets.Each message packet and each encoded packet includes a plurality ofsymbols having an index and each symbol of the encoded packets isgenerated by applying a Reed-Solomon code to the symbols of the messagepackets having the same index as the symbol of the encoded packets. Alength of the encoded packets is the same as a length of the messagepackets.

Other embodiments are directed to a non-transitory computer-readablemedium containing instructions that, when executed by a processor, causethe processor to encode a plurality of message packets to produce aplurality of encoded packets. Each message packet and each encodedpacket includes a plurality of symbols having an index and each symbolof the encoded packets is generated by applying a Reed-Solomon code tothe symbols of the message packets having the same index as the symbolof the encoded packets.

Still other embodiments are directed to a wireless communication device,including a network encoder and a physical layer. The network encoder isto encode a plurality of message packets to produce a plurality ofencoded packets. Each message packet and each encoded packet includes aplurality of symbols having an index and each symbol of the encodedpackets is generated by applying a Reed-Solomon code to the symbols ofthe message packets having the same index as the symbol of the encodedpackets. The physical layer is to transmit the encoded packets via awireless antenna.

Yet other embodiments are directed to a wireless communication device,including a physical layer to receive a plurality of encoded packets viaa wireless antenna, the encoded packets resulting from encoding a numberof message packets by applying a network code matrix to the messagepackets. The wireless communication device also includes a networkdecoder to receive a number of received packets at least equal to thenumber of message packets. Each of the received packets includes asequence index that correlates the received packet to one of the encodedpackets. The network decoder also is to generate a received packetmatrix by selecting a number of the received packets equal to the numberof message packets, where each column of the received packet matrixcorresponds to one of the selected received packets. The network decoderfurther is to generate a decoding matrix by forming a sub-matrix byselecting columns of the network code matrix that have indices that arethe same as the sequence indices of the selected received packets andinverting the sub-matrix. Finally, the network decoder is to multiplythe received packet matrix by the decoding matrix to generate arecovered matrix, where each column of the recovered matrix correspondsto a decoded packet.

BRIEF DESCRIPTION OF THE DRAWINGS

For a detailed description of exemplary embodiments of the invention,reference will now be made to the accompanying drawings in which:

Having thus described the invention in general terms, reference will nowbe made to the accompanying drawings, which are not necessarily drawn toscale, and wherein:

FIG. 1 shows a wireless communications system in accordance with variousembodiments;

FIGS. 2 a and 2 b show examples matrices used for network coding inaccordance with various embodiments;

FIG. 3 shows a network coding system in accordance with variousembodiments;

FIG. 4 shows an alternate network coding system in accordance withvarious embodiments; and

FIGS. 5 a and 5 b show flow charts of a method in accordance withvarious embodiments.

NOTATION AND NOMENCLATURE

Certain terms are used throughout the following description and claimsto refer to particular system components. As one skilled in the art willappreciate, companies may refer to a component by different names. Thisdocument does not intend to distinguish between components that differin name but not function. In the following discussion and in the claims,the terms “including” and “comprising” are used in an open-endedfashion, and thus should be interpreted to mean “including, but notlimited to . . . .” Also, the term “couple” or “couples” is intended tomean either an indirect or direct electrical connection. Thus, if afirst device couples to a second device, that connection may be througha direct electrical connection, or through an indirect electricalconnection via other devices and connections.

As used herein, the term “symbol” refers to a grouping of bits, whichexists in a Galois field (GF) of GF(2^(q)), where q bits are groupedinto a symbol.

As used herein, the term “message packet” refers to packets that containdata to be transmitted from one node to another node in a wirelessnetwork.

As used herein, the term “encoded packet” refers to packets that resultfrom encoding a group of message packets according to the variousembodiments of the present disclosure.

As used herein, the term “parity packet” refers to additional packetsproduced during a packet encoding procedure. For example, if theapplication of a network code to message packets results in encodedpackets that comprise the original message packets and two additionalpackets, the two additional packets are referred to as parity packets.

As used herein, the term “coding rate” refers to the ratio of messagepackets to encoded packets. For example, if five encoded packets areproduced by encoding three message packets, the coding rate is 3/5.Similarly, if seven encoded packets are produced by encoding fivemessage packets, the coding rate is 5/7.

As used herein, the term “erasure packet” or “erasure signal” refers toan indication sent to a decoder at a recipient when a packet failureoccurs during transmission of one of the encoded packets (e.g., biterrors or a cyclic redundancy check (CRC) failure are detected thatoccurred during transmission of the encoded packet).

As used herein, the term “received packet” refers to packetssuccessfully received by a decoder at a recipient. For example, if fiveencoded packets are transmitted and one packet failure occurs, thedecoder receives four received packets and one erasure packet or signal.

As used herein, the term “recovered packet” or “decoded packet” refersto packets that result from decoding a group of received packetsaccording to the various embodiments of the present disclosure.

DETAILED DESCRIPTION

The following discussion is directed to various embodiments of theinvention. Although one or more of these embodiments may be preferred,the embodiments disclosed should not be interpreted, or otherwise used,as limiting the scope of the disclosure, including the claims. Inaddition, one skilled in the art will understand that the followingdescription has broad application, and the discussion of any embodimentis meant only to be exemplary of that embodiment, and not intended tointimate that the scope of the disclosure, including the claims, islimited to that embodiment.

As explained above, a message packet containing data in the form of bitsor symbols is typically encoded by applying network codes to the bits orsymbols of the message packet to provide redundancy and data recoveryability in the event that certain bits or symbols of the encoded packetare lost during transmission. This may reduce the average number oftransmissions needed for a given amount of information, whichsubsequently reduces the number of retransmissions in the event of anerror or packet erasure. However, if an entire packet is lost duringtransmission, the packet must be retransmitted.

The network code should use the smallest Galois or finite field thatallows for the matrix containing the code (i.e., a network code matrix)to be inverted. Using a small finite field also helps to minimizeimplementation complexity at both the transmitter and receiver. Inaddition, the network code should be maximum distance separable (MDS),which means that if K or more packets are received correctly, then theoriginal K packets can be decoded correctly.

In accordance with various embodiments, a network code, in particular aReed-Solomon code, is applied to multiple message packets to produceencoded packets that are of the same length as the message packets. AReed-Solomon code is a linear block code over a finite field GF(2^(q)),where q=log₂ (N+1). In general, a Reed-Solomon code defined by itscoding rate, K/N, can correct N−K symbol erasures. Since theReed-Solomon can correct N−K symbol erasures, as long as K or moretransmission packets are received correctly, the message or originalpackets can be recovered. Thus, the Reed-Solomon code is also an MDScode.

To take advantage of time diversity in the system and increasereliability, the Reed-Solomon code is applied cross a plurality ofmessage packets to produce a larger number of encoded packets. Thenetwork encoder may assume that the message packets are of the samesize. The output of the network encoder is encoded packets that are ofthe same size as the message packets. The resulting encoded packets maythen be transmitted using an existing underlying wireless communicationprotocol without modification.

The number of encoded packets produced is greater than the number ofmessage packets and, depending on the particular network code, theoriginal message packets can be successfully recovered (i.e., decoded)provided that the number of received packets at the decoder is at leastequal to the number of message packets. Thus, some packets may be lostduring transmission (i.e., no more than the difference between thenumber of encoded packets and number of message packets) withoutrequiring a retransmission of the message packets because all themessage packets are able to be successfully recovered.

In situations where high packet transmission reliability is required,the application of such a network code provides numerous advantages. Forexample, a packet error rate (PER) of the system or wireless channel maybe experimentally determined and the network code may be chosen suchthat the PER is less than the fraction of packets that can be lost intransmission while still maintaining the ability to recover or decodethe original message packets. Additionally, by making the network codeknown to both the transmitter and the receiver rather than using arandom code, the network code does not have to be transmitted along withvarious packets, which reduces the overhead and increases the throughputof the system. Further, the inverse of the network code (i.e., to decodethe received packets) does not need to be calculated on-the-fly becausethe network code is known to the receiver, which reduces software andhardware complexity and computational requirements. Finally, asexplained above, the way in which the network code is applied to messagepackets results in encoded packets that have the same length as themessage packets. In accordance with the various examples of the presentdisclosure, network coding may be leveraged on top of existing wirelesscommunications protocols without the need to redesign other aspects ofthe system.

Turning now to FIG. 1, a wireless communications system 100 is shown inaccordance with various embodiments. The system 100 includes atransmitter 102 and a receiver 112. Although the transmitter 102 andreceiver 112 are shown separately, this is for simplicity of explanationand one skilled in the art appreciates that the functionality of boththe transmitter 102 and the receiver 112 may be embodied in a singlewireless transceiver that communicates with other wireless transceivers.The transmitter includes at least a network encoder 106, a medium accesscontrol (MAC) layer 106 and a physical layer (PHY) 108. The MAC 106 andthe PHY 108 coordinate to enable wireless communications (e.g.,transmitting and receiving data packets) via a wireless antenna 110.Similarly, the receiver 112 includes at least a PHY 116, a cyclicredundancy check (CRC) error-detecting block 118, a MAC 120 and anetwork decoder 122. As above, the MAC 120, the CRC 118 and the PHY 116coordinate to enable wireless communications via a wireless antenna 114.In some embodiments, the CRC 118 may be replaced or supplemented by adifferent type of packet error-detecting block.

In accordance with various embodiments, the network encoder 104 receivesmessage packets containing data to be transmitted from, for example, ahigher-layer application executing on the transmitter 102. The networkencoder 104 also encodes the message packets to produce a number ofencoded packets greater than the number of message packets. As explainedabove, the length of the message packets is preserved when encoded toproduce the encoded packets, and thus the encoded packets are suitablefor transmission by the PHY 108 using an underlying wirelesscommunication protocol of the transmitter 102. In accordance withvarious embodiments, the network encoder 104 encodes the message packetsby applying a Reed-Solomon code to corresponding symbols of the messagepackets to produce a corresponding symbol in the parity packets.Subsequently, the encoded packets may be sent to the PHY 108 (e.g., viathe MAC 106) for wireless transmission.

FIG. 2 a shows a message matrix X, a network code matrix A, and atransmission matrix Y to illustrate the functionality of the networkencoder 104 in further detail. The message matrix X contains K messagepackets, where each column in X represents a message packet; that is,the elements of a column correspond to symbols or bits of a messagepacket. As shown, the message matrix X contains L rows, which is thelength of the message packets.

The network code matrix A describes a Reed-Solomon (N, K) network code.That is, when the message matrix X is multiplied by the network codematrix A, a Reed-Solomon (N, K) network code is applied to the K messagepackets contained in the message matrix X to produce N encoded packetsin the transmission matrix Y. In some embodiments, the first K columnsof the network code matrix A comprise a K×K identity matrix (i.e.,a_(1,1)=a_(2,2)= . . . =a_(K,K)=1 and all other elements in thosecolumns are 0) and columns K+1 through N describe the Reed-Solomon (N,K) code. As a result, when the message matrix X is multiplied by thenetwork code matrix A, the Reed-Solomon (N, K) code is applied acrosseach row of the message matrix X to produce N−K parity symbols. In otherwords, the Reed-Solomon (N, K) code is applied across packets, insteadof within a packet, resulting in encoded packets of the same length asthe original K message packets.

The network code matrix A must be a full rank matrix in order to ensurethat any K linear combinations of encoded packets are linearlyindependent and therefore can be inverted at the receiver 112.Additionally, the number of linearly independent combinations of packetsis dependent on the size of the finite field. For a small size finitefield, the number of linearly independent combinations is small. For alarge size finite field, the number of linearly independent combinationsis large. Thus, depending on system requirements (e.g., packet errorrate), a larger finite field may be selected to enable the use of aReed-Solomon code where N is much larger than K.

As an example of the encoding process for a systematic code, the first Kcolumns of the transmission matrix Y are equal to the message matrix X.Additionally, symbols in a given row of columns K+1 through N of thetransmission matrix Y (i.e., the columns of the transmission matrix Ythat correspond to the parity packets produced by the application of theReed-Solomon (N, K) code to the message packets) are produced byapplying the Reed-Solomon (N, K) code to that same row of the messagematrix X.

As another example, assume a Reed-Solomon (7, 5) code is used. TheReed-Solomon (7,5) code is applied to the rows of the message matrix Xto generate the rows of the transmission matrix Y. The first 5 columnsof the transmission matrix Y are equal to the message matrix X. Each rowof the message matrix X and the transmission matrix Y may be describedas representing a symbol of a packet because the columns of bothmatrices represent the packets themselves. The rows or symbols may bereferred to as having an index; for example, the first row of eachmatrix has an index of 1 and the last row of each matrix has an index ofL. Thus, the transmission matrix Y contains N transmission packets eachhaving a length L, which is the same length as the message packets inthe message matrix X and the underlying wireless communication protocolemployed by the PHY 108 (e.g., on an existing wireless communicationdevice) is capable of transmitting the N transmission packets.

Referring again to FIG. 1, the PHY 116 of the receiver 112 receives thetransmission packets and passes the transmission packets to the CRC 118for error checking. Typically, all N transmission packets are received;however, in some cases, certain packets may never be received. As willbe explained in further detail below, a sequence number or index may beapplied to each received packet (e.g., by being transmitted with thepacket) that identifies the column of the transmission matrix Y that thereceived packet corresponds to.

Some transmission packets may not pass the CRC 118, meaning that thosepackets contain one or more errors and are considered erasures. In someembodiments, the CRC 118 may generate an erasure packet or erasuresignal to be sent to the network decoder 122 (e.g., via the MAC 120) toinform the network decoder 122 of the transmission packets that were notreceived successfully. The transmission packets that do pass the CRC 118(i.e., contain no errors) are referred to as received packets and aresent to the network decoder 122. A Reed-Solomon (N, K) code can correctN−K erasures, so provided that there are no more than N−K erasuresdetected by the CRC 118, the network decoder 122 is able to decode theoriginal K message packets.

FIG. 2 b shows a matrix R that includes M received packets, a decodingmatrix A′ and a recovered matrix X′ to illustrate the functionality ofthe network decoder 122 in further detail. Although the matrix R isshown as having M columns each corresponding to a received packet, inaccordance with various embodiments a received packet matrix isgenerated that contains a number of received packets equal to the numberof original message packets, namely K. The selection of received packetsmay take many forms, provided that K received packets are selected tomake up the columns of the received packet matrix. As explained above, aReed-Solomon (N, K) code can correct N−K erasures, so provided that M isgreater than K, the network decoder 122 is able to decode the original Kmessage packets. Additionally, as will be explained in further detailbelow, the decoding matrix A′ is a K×K matrix, and thus the receivedpacket matrix also contains K columns so that it may be multiplied bythe decoding matrix A′.

The decoding matrix A′ is formed by first selecting columns from thenetwork code matrix A that have indices that are the same as the indicesof the encoded packets that correspond to the selected received packets.In some embodiments, a sequence number or index may be applied to eachreceived packet (e.g., by being transmitted with the packet) thatidentifies the column of the transmission matrix Y that the receivedpacket corresponds to. For example, assume a Reed-Solomon (7, 5) code isused and thus there are 7 encoded packets in the transmission matrix Y.Of the 7 encoded packets, the encoded packet in column 5 of thetransmission matrix Y does not pass the CRC 118. Thus there are 6received packets that correspond to encoded packets in the transmissionmatrix having indices 1, 2, 3, 4, 6 and 7. Then, assume that thereceived packet selection scheme is to select the first K (i.e., 5 inthis case) received packets to generate the received packet matrix.Thus, the selected received packets correspond to encoded packets in thetransmission matrix having indices 1, 2, 3, 4 and 6 make up the columnsof the received packet matrix.

As a result, columns 1, 2, 3, 4 and 6 of the network code matrix A areselected, since these columns have the same indices as the encodedpackets that correspond to the selected received packets in the receivedpacket matrix. Then, the selected columns of the network code matrix A,which result in a K×K matrix, are inverted to form the decoding matrixA′. Further, the arrangement of the selected columns of the network codematrix A in the decoding matrix A′ should match the arrangement of theselected received packets in the received packet matrix. For example, ifthe ordering of the selected received packets is, for some reason,altered to correspond to columns 3, 4, 6, 1 and 2 of the transmissionmatrix, then the selected columns of the network code matrix A shouldalso be ordered as columns 3, 4, 6, 1 and 2 prior to inversion. Oneskilled in the art will appreciate that inversion of the sub-matrix ofthe network code matrix A is possible because a property of the K×Kidentity matrix taken in combination with columns that describe aReed-Solomon (N, K) network code is that any subset of K columns will belinearly independent.

Subsequently, the received packet matrix is multiplied by the decodingmatrix A′ to generate a recovered matrix X′. Each column of therecovered matrix X′ corresponds to one of the original K messagepackets, and thus the original K message packets are receivedsuccessfully at the receiver 112 despite an encoded packet being lostduring transmission from the transmitter 102 to the receiver 112.Additionally, although the above example only suggested one packet waslost during transmission, up to N−K packets may be lost duringtransmission and the original K message packets are still recoverable bythe network decoder 112. Further, although described specifically withrespect to a Reed-Solomon (7, 5) code, many other variations ofReed-Solomon networking codes may be employed.

Alternately, in some embodiments all M received packets may be selected.In this case, A′ may be generated by taking the pseudo-inverse of thecorresponding M columns of the network code matrix A. Thus, the receivedpacket matrix comprises the matrix R, which is L×M; the decoding matrixA′ is M×K; and the recovered matrix X′ is L×K. As above, each column ofthe recovered matrix X′ corresponds to one of the original K messagepackets.

In accordance with various embodiments, by preemptively sending a largernumber of packets (i.e., N packets) than what is required for successfuldecoding (i.e., K packets), the PER is reduced and thus retransmissionof packets is correspondingly reduced. This provides increasedreliability for wireless communications in the system 100. Additionally,as explained above, the network coding scheme may be employed at thenetwork layer so that underlying wireless communications protocols maybe maintained without costly modification. However, in alternateembodiments, the network coding scheme may be employed at the MAC 106,120 with minimal modifications while still taking advantage ofalready-developed commercial devices that utilize certain wirelesscommunication protocols.

The above-described wireless communication system 100 may be employed toprovide a point-to-point link, however is not limited to such links. Oneexample of applications in which increased reliability is important ispoint-to-point video links, such as those used in vehicular backupcameras where a wired connection is cumbersome or unwarranted. In thesecases, it is highly important that the video stream be received reliablywithout any dropout (i.e., low packet loss and a small number of packetretransmissions). Another example of applications in which increasedreliability is important is wireless sensors on a vehicle, such assensors used to monitor tire pressure, engine temperatures, and othercritical system parameters. Another application is wireless videodistribution from a set-top box or phone to a TV or monitor. In all ofthese applications, it is extremely important that the information(e.g., video packets) be delivered reliably and without the need forretransmission.

In some embodiments, if the message packets are not the same length,then pad bits or symbols may be inserted to the message packets toensure that all of the message packets are of equal length before theencoding process. In some cases, the pad bits or symbols are notrequired to be transmitted wirelessly as long as the packet lengths areknown or conveyed to the receiver 112. Then, at the receiver 112, thesepad bits or symbols may be re-inserted before the received packets arepassed to the network decoder 122.

FIG. 3 shows a network coding system 300 in accordance with variousembodiments. The network coding system 300 includes a packet encodingengine 302 and a packet decoding engine 304. In addition, a packetrepository 306 may be coupled to the engines 302, 304. The packetencoding engine 302 and the packet decoding engine 304 are combinationsof programming and hardware to execute the programming. Although shownseparately, the packet encoding engine 302 and the packet decodingengine 304 are not required to represent separate pieces of softwareprogramming. For example, each engine 302, 304 may share a commonprocessor and memory, although this is not required. Additionally, theprogramming that enables the functionality of each engine 302, 304 maybe included in the same executable file or library.

The packet encoding engine 302 receives message packets that containdata to be transmitted from, for example, a higher-layer applicationexecuting on the transmitter 102. The message packets may be receivedfrom the packet repository 306. The packet encoding engine 302 alsoencodes the message packets to produce a number of encoded packetsgreater than the number of message packets. As explained above, thelength of the message packets is preserved when encoded to produce theencoded packets, and thus the encoded packets are suitable forsubsequent transmission (e.g., by the PHY 108) using an underlyingwireless communication protocol of a transmitter. In accordance withvarious embodiments, the packet encoding engine 302 encodes the messagepackets by applying a Reed-Solomon code to corresponding symbols of themessage packets to produce a corresponding symbol in the parity packets.The packet encoding engine 302 performs the encoding process as isdescribed above with respect to FIGS. 1 and 2 a.

The packet decoding engine 304 receives a number of received packets.The packet decoding engine 304 may also receive an erasure packet orerasure signal (e.g., from a CRC 118) that indicates one or moretransmitted encoded packets were not received successfully. The receivedpackets and/or the erasure packets may be at least temporarily stored atthe packet repository 306. Similar to above, the packet decoding engine304 selects a number of received packets equal to the number of originalmessage packets (i.e., K received packets) to form columns of a receivedpacket matrix. The packet decoding engine 304 generates a decodingmatrix by forming a sub-matrix by selecting columns of a network codematrix (e.g., a matrix used by the packet encoding engine 302 to encodemessage packets prior to their transmission) that have indices that arethe same as the indices of the encoded packets that correspond to theselected received packets. Then, the packet decoding engine 304 invertsthe sub-matrix to form the decoding matrix. Finally, the packet decodingengine 304 multiplies the received packet matrix by the decoding matrixto generate a recovered matrix where each column corresponds to adecoded packet. This is similar to the decoding process as describedabove with respect to FIGS. 1 and 2 b.

FIG. 4 shows another example of a network coding system 400 inaccordance with various embodiments. The network coding system 400includes a memory resource 402 coupled to a processing resource 404. Theprocessing resource 404 is one or more local or distributed processors.The memory resource 402 includes one or more local or distributed memorydevices and comprises a packet encoding module 406 and a packet decodingmodule 408. Thus, the memory resource 402 and the processing resource404 are hardware components of the system 400.

Each module 406, 408 represents instructions that, when executed by theprocessing resource 404, implement an associated engine. For example,when the packet encoding module 406 is executed by the processingresource 404, the above-described packet encoding engine 302functionality is implemented. Similarly, when the packet decoding module408 is executed by the processing resource 404, the above-describedpacket decoding engine 304 functionality is implemented. The modules406, 408 may also be implemented as an installation package or packagesstored on the memory resource 402, which may be a CD/DVD or a serverfrom which the installation package may be downloaded. Additionally, insome embodiments, the above-described functionality may be implementedin an application-specific integrated circuit (ASIC), a combination ofan ASIC and software, or an application-specific instruction-setprocessor (ASIP).

FIG. 5 a shows a method 500 for network coding in accordance withvarious embodiments. The method 500 may be performed by, for example, ahardware processor of the transmitter 102 or the receiver 112. Themethod 500 begins in block 502 with receiving a plurality of messagepackets. The message packets may be received from, for example, ahigher-layer application executing on the transmitter 102. The method500 continues in block 504 with encoding the message packets to producea plurality of encoded packets comprising the message packets and one ormore parity packets. In accordance with various embodiments, the messagepackets are encoded by applying a Reed-Solomon code to correspondingsymbols of the message packets to produce a corresponding symbol in theparity packets. Subsequently, the encoded packets may be sent to the PHY108 (e.g., via the MAC 106) for wireless transmission.

FIG. 5 b shows the encoding step of block 504 in greater detail 550. Insome embodiments, the encoding step in block 504 may further comprisegenerating a message matrix, where each column of the message matrixcorresponds to one of the message packets and each element in a columncorresponds to one of the symbols of that message packet (block 552).The encoding step in block 504 may also comprise generating a networkcode matrix to apply the Reed-Solomon code to the message matrix (block554), for example as described above with respect to FIGS. 1 and 2 a.Finally, the encoding step in block 504 may include multiplying themessage matrix by the network code matrix to generate a transmissionmatrix (block 556). Each column of the transmission matrix correspondsto an encoded packet, which may be subsequently wirelessly transmitted.

Referring back to FIG. 5 a, in some embodiments the method 500 may alsoinclude, as in block 506, receiving a number of received packets atleast equal to the number of message packets. The received packets eachcorrespond to one of the transmitted encoded packets. The method 500 mayfurther continue in block 508 with generating a received packet matrixby selecting a number of the received packets equal to the number ofmessage packets (i.e., K received packets) and using the selectedreceived packets as columns in the received packet matrix. The method500 may then continue in block 510 with generating a decoding matrix byforming a sub-matrix by selecting columns of the network code matrixthat have indices that are the same as the indices of the encodedpackets that correspond to the selected received packets and invertingthe sub-matrix. This is similar to the decoding matrix generationdescribed above with respect to FIGS. 1 and 2 b. Finally, the method 500may continue in block 512 with multiplying the received packet matrix bythe decoding matrix to generate a recovered matrix, where each column ofthe recovered matrix corresponds to a decoded packet.

The above discussion is meant to be illustrative of the principles andvarious embodiments of the present invention. Numerous variations andmodifications will become apparent to those skilled in the art once theabove disclosure is fully appreciated. For example, although generallydescribed as applying systematic Reed-Solomon codes, certain embodimentsmay alternately employ non-systematic Reed-Solomon codes. Additionally,although described as a matrix-based implementation, this is done forease of explanation; the above coding scheme may be implemented in otherways, such as the use of linear feedback shift registers, or othermethods. Further, although described generally with respect to wirelesscommunications, the above Reed-Solomon linear network coding scheme maybe utilized in other communication systems, such as wired systems orpowerline communication (PLC) systems. It is intended that the followingclaims be interpreted to embrace all such variations and modifications.

What is claimed is:
 1. A method for network coding, comprising:encoding, by a processor, a plurality of message packets to produce aplurality of encoded packets; wherein each message packet and eachencoded packet comprises a plurality of symbols having an index; whereineach symbol of the encoded packets is generated by applying aReed-Solomon code to the symbols of the message packets having the sameindex as the symbol of the encoded packets; wherein a length of theencoded packets is the same as a length of the message packets; whereinthe encoded packets comprise the message packets and one or more paritypackets; wherein each symbol of the parity packets is generated byapplying a Reed-Solomon code to the symbols of the message packetshaving the same index as the symbol of the parity packets and sending bythe processor the resulting encoded packets to a physical layer of awireless transmitter for wireless transmission using an existingunderlying wireless communication protocol without modification.
 2. Themethod of claim 1 wherein the method is performed at a network layer ofa wireless transmitter.
 3. The method of claim 1 further comprising,prior to encoding, adding pad symbols to one or more of the messagepackets such that a length of each message packet is the same.
 4. Themethod of claim 1 wherein the number of message packets and encodedpackets are given by a coding rate of the Reed-Solomon code.
 5. Themethod of claim 1 wherein encoding further comprises: generating, by theprocessor, a message matrix wherein each column of the message matrixcorresponds to one of the message packets and each element in a columncorresponds to one of the symbols of the corresponding message packet;generating, by the processor, a network code matrix to apply theReed-Solomon code to the message matrix; and multiplying, by theprocessor, the message matrix by the network code matrix to generate atransmission matrix, wherein each column of the transmission matrixcorresponds to an encoded packet for wireless transmission.
 6. Themethod of claim 5 further comprising: receiving, by the processor, anumber of received packets at least equal to the number of messagepackets, each of the received packets comprising a sequence index thatcorrelates the received packet to one of the encoded packets;generating, by the processor, a received packet matrix by selecting anumber of the received packets equal to the number of message packets,wherein each column of the received packet matrix corresponds to one ofthe selected received packets; generating, by the processor, a decodingmatrix by forming a sub-matrix by selecting columns of the network codematrix that have indices that are the same as the sequence indices ofthe selected received packets and inverting the sub-matrix; andmultiplying, by the processor, the received packet matrix by thedecoding matrix to generate a recovered matrix, wherein each column ofthe recovered matrix corresponds to a decoded packet.
 7. Anon-transitory computer-readable medium containing instructions that,when executed by a processor, cause the processor to: encode a pluralityof message packets to produce a plurality of encoded packets; whereineach message packet and each encoded packet comprises a plurality ofsymbols having an index; wherein each symbol of the encoded packets isgenerated by applying a Reed-Solomon code to the symbols of the messagepackets having the same index as the symbol of the encoded packets;wherein a length of the encoded packets is the same as a length of themessage packets; wherein the encoded packets comprise the messagepackets and one or more parity packets; wherein each symbol of theparity packets is generated by applying a Reed-Solomon code to thesymbols of the message packets having the same index as the symbol ofthe parity packets and wherein executing the instructions further causesthe processor to send the encoded packets to a physical layer of awireless transmitter for wireless transmission.
 8. The non-transitorycomputer-readable medium of claim 7 wherein executing the instructionsfurther causes the processor to, prior to encoding, add pad symbols toone or more of the message packets such that a length of each messagepacket is the same.
 9. The non-transitory computer-readable medium ofclaim 7 wherein the number of message packets and encoded packets aregiven by a coding rate of the Reed-Solomon code.
 10. The non-transitorycomputer-readable medium of claim 7 wherein executing the instructionsfurther causes the processor to: generate a message matrix wherein eachcolumn of the message matrix corresponds to one of the message packetsand each element in a column corresponds to one of the symbols of thecorresponding message packet; generate a network code matrix to applythe Reed-Solomon code to the message matrix; multiply the message matrixby the network code matrix to generate a transmission matrix, whereineach column of the transmission matrix corresponds to an encoded packetfor wireless transmission.
 11. The non-transitory computer-readablemedium of claim 10 wherein executing the instructions further causes theprocessor to: receive a number of received packets at least equal to thenumber of message packets, each of the received packets comprising asequence index that correlates the received packet to one of the encodedpackets; generate a received packet matrix by selecting a number of thereceived packets equal to the number of message packets, wherein eachcolumn of the received packet matrix corresponds to one of the selectedreceived packets; generate a decoding matrix by forming a sub-matrix byselecting columns of the network code matrix that have indices that arethe same as the sequence indices of the selected received packets andinverting the sub-matrix; multiply the received packet matrix by thedecoding matrix to generate a recovered matrix, wherein each column ofthe recovered matrix corresponds to a decoded packet.
 12. A wirelesscommunication device, comprising: a network encoder to: encode aplurality of message packets to produce a plurality of encoded packets;wherein each message packet and each encoded packet comprises aplurality of symbols having an index; wherein each symbol of the encodedpackets is generated by applying a Reed-Solomon code to the symbols ofthe message packets having the same index as the symbol of the encodedpackets; wherein a length of the encoded packets is the same as a lengthof the message packets; wherein the encoded packets comprise the messagepackets and one or more parity packets; wherein each symbol of theparity packets is generated by applying a Reed-Solomon code to thesymbols of the message packets having the same index as the symbol ofthe parity packets and a physical layer to transmit the encoded packetsvia a wireless antenna and sending by the network encoder the resultingencoded packets to a physical layer of a wireless transmitter forwireless transmission using an existing underlying wirelesscommunication protocol without modification.
 13. The wirelesscommunication device of claim 12 wherein the network encoder comprises anetwork layer of a wireless transmitter.
 14. The wireless communicationdevice of claim 12 wherein the network encoder, prior to encoding, addspad symbols to one or more of the message packets such that a length ofeach message packet is the same.
 15. The wireless communication deviceof claim 12 wherein the number of message packets and encoded packetsare given by a coding rate of the Reed-Solomon code.
 16. The wirelesscommunication device of claim 12 wherein the network encoder is furtherto: generate a message matrix wherein each column of the message matrixcorresponds to one of the message packets and each element in a columncorresponds to one of the symbols of the corresponding message packet;generate a network code matrix to apply the Reed-Solomon code to themessage matrix; multiply the message matrix by the network code matrixto generate a transmission matrix, wherein each column of thetransmission matrix corresponds to an encoded packet for wirelesstransmission.
 17. A wireless communication device, comprising: aphysical layer to receive a plurality of encoded packets via a wirelessantenna, the encoded packets resulting from encoding a number of messagepackets by applying a network code matrix to the message packets; and anetwork decoder to: receive a number of received packets at least equalto the number of message packets, each of the received packetscomprising a sequence index that correlates the received packet to oneof the encoded packets; and generate a received packet matrix byselecting a number of the received packets equal to the number ofmessage packets, wherein each column of the received packet matrixcorresponds to one of the selected received packets; generate a decodingmatrix by forming a sub-matrix by selecting columns of the network codematrix that have indices that are the same as the sequence indices ofthe selected received packets and inverting the sub-matrix; multiply thereceived packet matrix by the decoding matrix to generate a recoveredmatrix, wherein each column of the recovered matrix corresponds to adecoded packet and sending the resulting decoded packets to ahigher-layer application of a wireless receiver without the need forretransmission using an existing underlying wireless communicationprotocol without modification.